//
// 
// 
// This file is part of glScript project.
//
//   glScript is free software: you can redistribute it and/or modify
//   it under the terms of the GNU Lesser General Public License as published by
//   the Free Software Foundation, either version 3 of the License, or
//   (at your option) any later version.
//
//   glScript is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//   GNU Lesser General Public License for more details.
//
//   You should have received a copy of the GNU Lesser General Public License
//   along with glScript. If not, see <http://www.gnu.org/licenses/>.
//
//   Copyright (c) 2012 Bal Bahadur Chettri
//
//   Author: Bal Bahadur Chettri (balu.chettri@gmail.com)
//
#include "stdafx.h"

#if defined(WIN32)
#include <glscript/activescript/gls_activescript_marshal.h>

#ifdef _CPPTYPE
#undef _CPPTYPE
#endif

#define _CPPTYPE signed char
GLS_COMVARIANT_FUNC_BEGIN(char);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,cVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE unsigned char
GLS_COMVARIANT_FUNC_BEGIN(byte);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE short
GLS_COMVARIANT_FUNC_BEGIN(short);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE unsigned short
GLS_COMVARIANT_FUNC_BEGIN(ushort);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE int
GLS_COMVARIANT_FUNC_BEGIN(int);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE unsigned int
GLS_COMVARIANT_FUNC_BEGIN(uint);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE long
GLS_COMVARIANT_FUNC_BEGIN(long);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE unsigned long
GLS_COMVARIANT_FUNC_BEGIN(ulong);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE float
GLS_COMVARIANT_FUNC_BEGIN(float);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_R4,fltVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE
#define _CPPTYPE double
GLS_COMVARIANT_FUNC_BEGIN(double);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_R4,fltVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_R8,dblVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI1,bVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI2,uiVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I1,cVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I2,iVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_INT,intVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UINT,uintVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_I4,lVal);
	GLS_COMVARIANT_FUNC_TYPECHECK(VT_UI4,ulVal);
GLS_COMVARIANT_FUNC_END();

#undef _CPPTYPE

#endif // WIN32
